<?php
final class Main_Config 
{
	/**
	 * Конфигурационный массив 
	 * @var array
	 */
	private $_data;
	
	/**
	 * @var Main_Config
	 */
	private static $_instance = null;
	
	/**
     * Синглетон
     * @return Main_Config
     */
	public static function getInstance()
	{
		if (null === self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
	}
	
	/**
	 * Конструктор
	 * @see getInstance() 
	 */
	private function __construct() 
	{
		$this->init();
	}
	
	/**
	 * Иницилизация
	 * 
	 * Если в конфигурационных директориях встречается файл example.conf.php содержания:
	 * array(
	 * 	'param1' => 'value1',
	 *  'param2' => array(
	 *  	'param21' => 'value21',
	 *      'param22' => 'value22',		
	 * )
	 * , то: 
	 * $this->_data['example'] = array(
	 * 	'param1' => 'value1',
	 *  'param2' => array(
	 *  	'param21' => 'value21',
	 *      'param22' => 'value22',		
	 * ) 
	 * 
	 * @return Main_Config
	 */
	public function init() 
	{
	    // конфиги в USR_CONFIG_DIR могут переопределить DEFAULT_CONFIG_DIR
		$configPaths = array(DEFAULT_CONFIG_DIR, USR_CONFIG_DIR);   
		foreach ($configPaths as $configPath) {
			if ($files = @scandir($configPath)) {
				foreach ($files as $file) {
					if ( (!in_array($file,array('.', '..'))) && (is_file($configPath.'/'.$file)) ) { 
						if ( (preg_match('/^(.+)\.conf\.php$/i', $file, $matches)) ) {
							$instanceName = $matches[1];
							$instanceParams = @include($configPath.'/'.$file);
							if (is_array($instanceParams)) {
							    $this->_data[$instanceName] = $instanceParams;
							}         
						}	
					}	
				}	
			}
		}
		return $this;
	}
	
	/**
	 * @return array
	 */
	public function getData() 
	{
		return $this->_data;
	}

	/**
	 * @return mixed
	 */
	public function get($name) 
	{
		return $this->_data[$name];
	}
}

